着色器最佳实践
在提供了可编程管道的 OpenGL ES 2.0 和更高版本中,您的应用程序会花费相当多的时间来执行着色器程序。尤其是对于手机和嵌入式硬件,着色器会是很多问题的根源,包括性能瓶颈和图形伪影。当正确使用时,着色器可以在 CPU 与 GPU 之间分配计算,从而帮助您实现出色的图形质量和性能。您必须决定是在片段着色器还是顶点着色器中执行计算。
系统会为每个顶点运行一次着色器程序中的顶点着色器,并为每个像素运行一次片段着色器。像素通常比顶点多一个数量级,因此最佳做法是在顶点着色器中执行尽可能多的计算,并将这些结果用在片段着色器中。
一些最常见的着色器瓶颈包括:
- 在片段着色器中执行不必要的计算或者是重型的片段着色器。请参阅优化片段着色器。
- 使用长顶点着色器计算 3D 模型。如果顶点着色器是瓶颈,请减少指令数量,以提高性能。如果片段着色器是瓶颈,则在顶点着色器中进行的优化不会影响性能。
- 在屏幕上显示很多需要填充大量像素的片段。
- 将顶点发送给 GPU 并由顶点着色器进行处理。三角形计数会表明每帧绘制的顶点计数。请参阅排除应用程序的性能问题。
Kanzi Studio 分别为低精度 (ES2Low) 和高精度 (ES2High) 着色器配置文件提供了一个模板。这两个模板的主要区别在于,大多数计算(包括应用光源),对于高精度是在片段着色器(每个像素)中完成,但对于低精度是在顶点着色器中完成。根据图形硬件以及场景的复杂程度,可能会对性能产生非常大的影响。
对于手机和嵌入式设备,请对 [-2..2] 范围内的所有变量使用低精度。您可以降低着色器中使用的 uniform 和 varying 特性的精度,以优化性能。着色器中的精度因 GLES 而异。
着色器因材质而异。您可以直接在 Kanzi Studio 中直接修改着色器。请参阅编辑着色器。
在您的 Kanzi 应用程序中使用着色器的最佳实践:
- 降低精度并从片段计算切换到顶点计算,从而优化片段着色器。请参阅优化片段着色器。
- 如果节点呈现的顺序需要在着色器程序之间过多切换,则渲染速度会减慢。请参阅减少着色器切换。
- 让 Kanzi Studio 编译代码并以二进制格式导出着色器。这样可以缩短应用程序的加载时间。请参阅使用二进制着色器。
- 当用户在具有多核处理器的环境中运行 Kanzi 应用程序时,Kanzi 会自动使用多个 CPU 内核将 kzb 文件中的 GPU 资源加载到 RAM 中。 Kanzi 使您可以配置希望应用程序使用的内核数。请参阅并行加载资源。
- 确保着色器只计算您使用的光源数量。
- 限制应用程序中着色器和场景 (Scene) 节点中的光源数量。
- 使用着色器工具(例如 PVRShaderEditor)获取有关着色器性能成本的全面信息。
- 确保您的所有着色器中没有出现任何错误或警告。
另请参阅
减少着色器切换
使用二进制着色器
优化片段着色器
并行加载资源
设置 Kanzi Engine 如何处理未使用的资源
编辑着色器
使用排序过滤器 (Sorting Filter)防止过度绘制
排除应用程序的性能问题
最佳实践
打开导航